class Engin {
    public void start() {
    }

    public void rev() {
    }

    public void stop() {
    }
}

class Wheel {
    public void inflate(int psi) {
    }
}

class Window_ {
    public Window_() { }
    public Window_(int marker) {
        System.out.println("Window_(" + marker + ")");
    }

    public void rollup() {
    }

    public void rolldown() {
    }
}

class Door {
    public Window_ window = new Window_();

    public void open() {
    }

    public void close() {
    }
}

class Car {
    public Engin engin = new Engin();
    public Wheel[] wheel = new Wheel[4];
    public Door
            left_door = new Door(),
            right_door = new Door();

    public Car() {
        for (int i = 0; i < wheel.length; i++)
            wheel[i] = new Wheel();
    }
}

public class CombinedCar {
    public static void main(String[] args) {
        Car car = new Car();
        car.left_door.window.rollup();
        car.wheel[0].inflate(72);
    }
}

/*
当希望在新类中使用现有类的功能而不是其接口时，应该使用组合。
在新类中嵌入一个对象（通常是private）来实现自己的特性。新类的用户看到的是新类定义的接口，而不是嵌入对象的接口。

继承是用来表示“is-a”关系的，而组合是用来表示“has-a”关系的。
 */